package com.swapbytes.jrexportcmd;

import com.swapbytes.jrexportcmd.Types.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * Clase encargada de la conexion a la base de datos.
 *
 * @author Nicola Strappazzon C., nicola51980@gmail.com
 * @version 1.1.0
 */
public class DataBase {
  private Types.Driver _drv      = null;
  private Connection   _cn       = null;
  private String       _host     = null;
  private String       _user     = null;
  private String       _password = null;
  private String       _db       = null;

  /**
   * Inicia la conexion al manejador de base de datos.
   */
  public void connect() {
	try {
        // Cargamos el Driver.
        switch(this._drv) {
            case PGSQL:
                Class.forName("org.postgresql.Driver");
                break;
            case MYSQL:
                Class.forName("com.mysql.jdbc.Driver");
                break;
        }
	} catch (ClassNotFoundException ex) {
	  System.out.println("DataBase: Couldn't find the driver!");
//	  cnfe.printStackTrace();
	  System.exit(1);
	}

	try {
        switch(this._drv) {
            case PGSQL:
                this._cn = DriverManager.getConnection("jdbc:postgresql://" + this._host + "/" + this._db, this._user, this._password);
                break;
            case MYSQL:
                this._cn = DriverManager.getConnection("jdbc:mysql://" + this._host + "/" + this._db, this._user, this._password);
                break;
        }
	} catch (SQLException ex) {
	  System.out.println("DataBase: Couldn't connect to DB server.");
//	  se.printStackTrace();
	  System.exit(1);
	}
  }

  /**
   * Define el tipo de driver a usar.
   *
   * @param host
   */
  public void setDriver(Types.Driver drv) {
	this._drv = drv;
  }

  /**
   * Define la dirección del servidor.
   *
   * @param host
   */
  public void setHost(String host) {
	this._host = host;
  }

  /**
   * Define el nombre de la base de datos.
   *
   * @param db
   */
  public void setDB(String db) {
	this._db = db;
  }

  /**
   * Define el nombre de usuario.
   *
   * @param user
   */
  public void setUser(String user) {
	this._user = user;
  }

  /**
   * Define la contraseña del usuario.
   *
   * @param password
   */
  public void setPassword(String password) {
	this._password = password;
  }

  /**
   * Obtiene la conexion a la base de datos.
   *
   * @return
   */
  public Connection getConnection() {
	return this._cn;
  }

  /**
   * Cierra la conexion a la base de datos.
   */
  public void disconnect() {
	if (this._cn != null) {
	  try {
		this._cn.close();
	  } catch (SQLException ex) {
		Logger.getLogger(Export.class.getName()).log(Level.SEVERE, null, ex);
	  }
	}
  }

}
